c语言笨蛋问题`

来源:百度知道 编辑:UC知道 时间:2024/05/16 08:31:07
#include <stdio.h>
void main()
{
char ch;
int a=0;
while((ch=getchar())!='\n')
{
if(ch>='0'&&ch<='9')
a+=ch-'0';
}
printf("%d\n",a);
}

这是一个累加一行字符中的数字的程序,请问为何a+=ch-'0'可将数字字符转化为相应的数值???????
详细点 ,说明下原理……

a+=ch-'0';
因为a的整型的,ch和'0'都是字符型的
计算机先计算ch-'0',得到一个字符型的数据,在转化为整型的数据赋值给a
每个字符都对应一个ASCII编码,具体对应在C语言书的附录中有

跟C的存储有关系
ASCII编码的值

用了ASC||值

在ascII码表里,'0'这个字符的序号是48,'1'是49,'2'是50,以此类推。所以你把每个字符的ascII值 - 48 ,不就能得到这个字符代表的数字的值了吗

看书去..